package com.mms.entity.service;

import com.mms.entity.dao.HibernateDao;
import com.mms.entity.model.Page;
import org.hibernate.Filter;
import org.hibernate.SQLQuery;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.query.Query;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * Created by dan3652@sina.com on 2016-12-07 16:47.
 */
public interface EntityService<PojoType> {
    Filter enableFilter(String var1);
    HibernateDao getEntityDao();

    /**
     * 根据id查询
     * @param id
     * @return
     */
    PojoType get(Serializable id);

    void saveOrUpdate(Object obj);

    Serializable save(Object obj);

    /**
     * 查询所有
     * @return
     */
    List getAll();

    /**
     * 多条件查询
     * @param hql   hql语句
     * @param args  数组
     * @return
     */
    List find(String hql, Object... args);

    /**
     * 查询多个，相当于sql中的in
     * @param strs
     * @return
     */
    List findByIn(Integer... strs);

    List find(int start, int end, String hql, Object... args);

    /**
     * 分页无条件查询
     * @param page
     * @return
     */
    Page pagedQuery(Page page);
    /**
     * 分页一个参数条件查询
     * @param page
     * @return
     */
    Page pagedQuery(String fieldName, Object obj, Page page);
    /**
     * 分页多条件查询
     * @param page
     * @return
     */
    Page pagedQuery(Map<String, Object> map, Page page);
    /**
     * hql分页多条件查询
     * @param page
     * @return
     */
    Page pagedQuery(String hql, Page page, Object... objs);

    Page pagedQuery(Page page, DetachedCriteria criteria);
    /**
     * sql分页查询
     */
    Page pageQueryBySQL(String sql, Page page);
    /**
     * sql分页多条件查询
     */
    Page pageQueryBySQL(String sql, Page page, Object... objs);

    Long getCountBy(String var1, Object var2);

    Long getCount(String var1, Object... var2);

    Long getCount(String var1);

    Long getCount(DetachedCriteria var1);

    Long getCount(Map<String, Object> var1);

    int bulkUpdate(String hql);

    int bulkUpdate(String hql, Object obj);

    int bulkUpdate(String hql, Object... objs);

    SQLQuery createSQLQuery(String var1);

    Query createQuery(String var1);

    Object getObject(DetachedCriteria var1);

    Object getObject(String var1, Object... var2);

    Object getObjectBy(String var1, Object var2);

    Object getObjectBy(Map<String, Object> var1);
}
